php 关于支付宝手机网站支付(alipay.wap.create.direct.pay.by.user)

官方文档
官方demo

手机网站支付的文档和demo给的已经特别的详细了, 这里我就说一下实际开发中值得注意的问题吧

1.支付宝手机网站支付,需要去支付宝的后台的签约管理添加手机支付

2.构造要请求的参数数组的时候加上"app_pay" => "Y"

在浏览器调用的时候可以唤起支付宝客户端,如果没有安装支付宝,则继续进行手机网站支付

3.页面跳转同步通知return_url如果你想带其他参数也是可以的

文档上是这么写的

设置页面跳转同步通知页面(return_url)的路径时,不要在页面文件的后面再加上自定义参数。例如:
错误的写法:http://www.alipay.com/alipay/return_url.php?xx=11
正确的写法:http://www.alipay.com/alipay/return_url.php

文档这么写是因为return_url在验证的时候会通过$_GET去生成签名,这个签名会和通过notify_id获取到的结果做比对,所以这里$_GET里面不能有别的参数

但事实上可以通过代码来避开

比如你的return_url 为 http://xxxxxx/alipay/return_url.php?uuid=12345

那么在你的return_url.php就得改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$get_temp = $_GET;
unset($_GET['uuid']);
//这个时候的$_GET是不带我们附加的参数的

//$alipay_config 配置文件参数
$alipayNotify = new \AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyReturn();

$_GET = $get_temp;

//这个时候就可以开始我们的逻辑了
$uuid = $_GET['uuid'];
if ($verify_result) {//验证成功
//交易状态
$trade_status = $_GET['trade_status'];
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
//交易成功
} else {
echo "trade_status=" . $_GET['trade_status'];
}
} else {
die("验证失败");
}